]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
Avoid doing expensive work when not mapped
authorColin Walters <walters@verbum.org>
Sat, 3 Oct 2009 00:17:34 +0000 (20:17 -0400)
committerColin Walters <walters@verbum.org>
Mon, 5 Oct 2009 15:32:33 +0000 (11:32 -0400)
For some unknown reason we were connecting to app-added and
app-removed on ShellAppMonitor in the AppDisplay class, which
never made any use of the data.  Simply don't connect to those
signals for now.  In the future we should have AppDisplay
be using the AppIcon class which will more correctly handle
dynamic changes.

In the AppWell, avoid doing the full relayout until we're
actually mapped.

https://bugzilla.gnome.org/show_bug.cgi?id=597169

js/ui/appDisplay.js

index bcdfcffa0e988b7b026ba0369712ce9d08cdaefe..7f2b8127bb480fabf0eeca7feb5a5ab7a09778e8 100644 (file)
@@ -192,14 +192,6 @@ AppDisplay.prototype = {
             this._appsStale = true;
             this._redisplay(GenericDisplay.RedisplayFlags.NONE);
         }));
-        this._appMonitor.connect('app-added', Lang.bind(this, function(monitor) {
-            this._appsStale = true;
-            this._redisplay(GenericDisplay.RedisplayFlags.NONE);
-        }));
-        this._appMonitor.connect('app-removed', Lang.bind(this, function(monitor) {
-            this._appsStale = true;
-            this._redisplay(GenericDisplay.RedisplayFlags.NONE);
-        }));
 
         this._focusInMenus = true;
         this._activeMenuIndex = -1;
@@ -770,6 +762,9 @@ AppWell.prototype = {
                                    x_align: Big.BoxAlignment.CENTER });
         this.actor._delegate = this;
 
+        this._pendingRedisplay = false;
+        this.actor.connect('notify::mapped', Lang.bind(this, this._onMappedNotify));
+
         this._grid = new WellGrid();
         this.actor.append(this._grid.actor, Big.BoxPackFlags.EXPAND);
 
@@ -809,7 +804,20 @@ AppWell.prototype = {
                             values[id] = index; return values; }, {});
     },
 
+    _onMappedNotify: function() {
+        let mapped = this.actor.mapped;
+        if (mapped && this._pendingRedisplay)
+            this._redisplay();
+    },
+
     _redisplay: function () {
+        let mapped = this.actor.mapped;
+        if (!mapped) {
+            this._pendingRedisplay = true;
+            return;
+        }
+        this._pendingRedisplay = false;
+
         this._grid.removeAll();
 
         let favoriteIds = this._appSystem.get_favorites();